#pragma once

#include "base_registrar.h"

namespace bootstrap {
namespace registrars {

/**
 * @brief 基础设施层注册器
 * @details 负责注册基础设施层的具体实现
 */
class InfrastructureRegistrar : public BaseRegistrar
{
public:
    explicit InfrastructureRegistrar(std::shared_ptr<ServiceContainer> container);
    virtual ~InfrastructureRegistrar() = default;

protected:
    void doRegisterServices() override;
    void doInitializeServices() override;

private:
    /**
     * @brief 注册日志服务
     */
    void registerLogging();

    /**
     * @brief 注册通信服务
     */
    void registerCommunication();

    /**
     * @brief 注册数据持久化服务
     */
    void registerPersistence();

    /**
     * @brief 注册其他基础设施服务
     */
    void registerOtherServices();

    /**
     * @brief 注册配置服务
     */
    void registerConfigurationService();

    /**
     * @brief 注册地图服务
     */
    void registerMapService();

    /**
     * @brief 注册通用服务
     */
    void registerCommonService();
};

} // namespace registrars
} // namespace bootstrap